package net.wangy.basiccode1.javastring;

import org.junit.Test;

import java.util.Arrays;
import java.util.Scanner;

//String字符串常用方法联系
public class JavaStringLianxi {

    //1、判断功能的方法
    //equals将此字符串与指定对象进行比较。
    //equalsIgnoreCase将此字符串与指定对象进行比较，忽略大小写。
    @Test
    public void exerciseEqualsAndEqualsIgnoreCase(){
        String s1="hello";
        String s2="hello";
        String s3="HELLO";
        System.out.println(s1.equals(s2));
        System.out.println(s1.equals(s3));
        System.out.println("=================================");
        System.out.println(s1.equalsIgnoreCase(s2));
        System.out.println(s1.equalsIgnoreCase(s3));
        System.out.println("---------------------------------");
    }

    /**
     *2、第二类获取功能的方法
     * public int length () ：返回此字符串的长度。
     * public String concat (String str) ：将指定的字符串连接到该字符串的末尾。
     * public char charAt (int index) ：返回指定索引处的 char值。
     * public int indexOf (String str) ：返回指定子字符串第一次出现在该字符串内的索引。
     * public String substring (int beginIndex) ：返回一个子字符串，从beginIndex开始截取字符串到字符串结尾。
     * public String substring (int beginIndex, int endIndex) ：返回一个子字符串，从beginIndex到endIndex截取字符串。含beginIndex，不含endIndex。
     */
    @Test
    public void exerciseOtherFangfa_1(){
        String s="helloworld";

        //获取此字符串长度
        System.out.println("获取字符串长度：");
        System.out.println(s.length());

        System.out.println("将指定字符串连接到该字符串末尾：");
        String s1 = s.concat("+hello wangy");
        System.out.println(s1);

        System.out.println("获取指定索引处的字符：");
        System.out.println(s.charAt(0));
        System.out.println(s.charAt(1));

        System.out.println("int indexOf(String str):获取str在字符串对象中第一次出现的索引,没有返回‐1。:");
        System.out.println(s.indexOf("l"));
        System.out.println(s.indexOf("owo"));
        System.out.println(s.indexOf("ak"));

        System.out.println("String substring(int start):从start开始截取字符串到字符串结尾:");
        System.out.println(s.substring(0));
        System.out.println(s.substring(5));

        System.out.println("String substring(int start,int end):从start到end截取字符串。含start，不含end。");
        System.out.println(s.substring(0, s.length()));
        System.out.println(s.substring(3,8));
    }
    /*3、第三类转换功能的方法
    public char[] toCharArray () ：将此字符串转换为新的字符数组。
    public byte[] getBytes () ：使用平台的默认字符集将该 String编码转换为新的字节数组。
    public String replace (CharSequence target, CharSequence replacement) ：将与target匹配的字符串使用replacement字符串替换。
     */
    @Test
    public void exerciseOtherFangfa_2(){
        //创建字符串对象
        String s = "abcde";

        //char[]   chs=s.toCharArray():把字符串转化为字符数组
        char[] chars = s.toCharArray();
        for (int i = 0; i < chars.length; i++) {
            System.out.println(chars[i]);
        }
        System.out.println("-----------------------");

        //// byte[] getBytes ():把字符串转换为字节数组
        byte[] bytes = s.getBytes();
        for (int i = 0; i < bytes.length; i++) {
            System.out.println(bytes[i]);
        }
        System.out.println("-------------------------");
        // 替换字母world为大写WANGY
        String str="hello world";
        String replace = str.replace("world", "WANGY");
        System.out.println(replace);
    }

    /**4、第四类分割功能的方法
     * public String[] split(String regex) ：将此字符串按照给定的regex（规则）拆分为字符串数组。
     */
    @Test
    public void exerciseSplit(){
        String str="ni@hao@shi@jie";
        String[] split = str.split("@");
        for (int i = 0; i < split.length; i++) {
            System.out.println(split[i]);
        }
    }

    /**
     * String类的练习之拼接字符串:
     * 题目：定义一个方法，把数组{1,2,3}按照指定个格式拼接成一个字符串。格式参照如下：[word1#word2#word3]
     */
    @Test
    public void StringTest1(){
        int[] arr={1,2,3};
        String s="[";
        for (int i = 0; i < arr.length; i++) {
            if(i==arr.length-1){
                s = s.concat(arr[i] + "]");
            }else {
                s = s.concat(arr[i] + "#");
            }
        }
        System.out.println(s);
    }

    /**统计字符个数:
     * 题目：键盘录入一个字符串，统计字符串中大小写字母及数字字符个数
     */
    @Test
    public void StringTest2(){
//        Scanner scan = new Scanner(System.in);
//        System.out.println("请输入一个字符串（只能是大小写字母或者数字）：");
//        String s = scan.nextLine();
//
//        int bigCount=0;
//        int smallCount=0;
//        int numberCount=0;
//
//        for (int i = 0; i < s.length(); i++) {
//            char c = s.charAt(i);
//            if(c>='A'&&c<='Z'){
//                bigCount++;
//            }else if(c>='a'&&c<='z'){
//                smallCount++;
//            }else if(c>='0'&&c<='9'){
//                numberCount++;
//            }else {
//                System.out.println("此字符有误："+c);
//            }
//        }
//        System.out.println("大写字母有："+bigCount);
//        System.out.println("小写字母有："+smallCount);
//        System.out.println("数字有："+numberCount);
    }

    /**
     * 由于要获取系统输入必须有main方法
     * @param args
     */
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        System.out.println("请输入一个字符串（只能是大小写字母或者数字）：");
        String s = scan.nextLine();

        int bigCount=0;
        int smallCount=0;
        int numberCount=0;

        for (int i = 0; i < s.length(); i++) {
            char c = s.charAt(i);
            if(c>='A'&&c<='Z'){
                bigCount++;
            }else if(c>='a'&&c<='z'){
                smallCount++;
            }else if(c>='0'&&c<='9'){
                numberCount++;
            }else {
                System.out.println("此字符有误："+c);
            }
        }
        System.out.println("大写字母有："+bigCount);
        System.out.println("小写字母有："+smallCount);
        System.out.println("数字有："+numberCount);
    }
}
